package pl.projekt.aplikacja.encje;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

/**
 * Klient
 */
@Entity
@Table(name="KLIENCI")
public class Klient {
	
	/** Identyfikator techniczny encji */
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	@Column(name="ID", nullable=false, unique=true)
	private Long id;
	
	/** Imię */
	@Column(name="IMIE", nullable=false, length=60)
	private String imie;
	
	/** Nazwisko */
	@Column(name="NAZWISKO", nullable=false, length=60)
	private String nazwisko;
	
	/** Data urodzenia */
	@Column(name="DATA_URODZENIA", nullable=false)
	private Date dataUrodzenia;
	
	/** Numer telefonu */
	@Column(name="TELEFON")
	private String telefon;
	
	/** E-mail */
	@Column(name="EMAIL", unique=true)
	private String email;
	
	/** Adres */
	@OneToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL, mappedBy="klient")
	private Adres adres;
	
	/** Zamówienia */
	@OneToMany(fetch=FetchType.LAZY, mappedBy="klient")
	private Set<Zamowienie> zamowienia;
	
	/**
	 * Tworzy instancję klasy {@code Klient}
	 */
	public Klient() {
		zamowienia = new HashSet<Zamowienie>();
	}

	/**
	 * Tworzy instancję klasy {@code Klient}
	 */
	public Klient(String imie, String nazwisko, Date dataUrodzenia, String telefon, String email, Adres adres, Set<Zamowienie> zamowienia) {
		this.imie = imie;
		this.nazwisko = nazwisko;
		this.dataUrodzenia = dataUrodzenia;
		this.telefon = telefon;
		this.email = email;
		this.adres = adres;
		this.zamowienia = zamowienia;
	}

	public String getImie() {
		return imie;
	}

	public void setImie(String imie) {
		this.imie = imie;
	}

	public String getNazwisko() {
		return nazwisko;
	}

	public void setNazwisko(String nazwisko) {
		this.nazwisko = nazwisko;
	}

	public Date getDataUrodzenia() {
		return dataUrodzenia;
	}

	public void setDataUrodzenia(Date dataUrodzenia) {
		this.dataUrodzenia = dataUrodzenia;
	}

	public String getTelefon() {
		return telefon;
	}

	public void setTelefon(String telefon) {
		this.telefon = telefon;
	}
	
	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Adres getAdres() {
		return adres;
	}

	public void setAdres(Adres adres) {
		this.adres = adres;
	}

	public Set<Zamowienie> getZamowienia() {
		return zamowienia;
	}

	public void setZamowienia(Set<Zamowienie> zamowienia) {
		this.zamowienia = zamowienia;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

}
